package scream.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import scream.excepcion.DAOExcepcion;
import scream.modelo.TipoIntervencion;
import scream.util.ConexionBD;

public class TipoIntervencionDAO extends BaseDAO{
	public Collection<TipoIntervencion> buscarPorCodigo(String codigo) throws DAOExcepcion {
		System.out.println("TipoIntervencionDAO: buscarPorCodigo(String codigo)");
		String query = "SELECT coTipoIntervencion, noTipoIntervencion FROM rol WHERE coTipoIntervencion like ?";
		Collection<TipoIntervencion> lista = new ArrayList<TipoIntervencion>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + codigo + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				TipoIntervencion vo = new TipoIntervencion();
				vo.setCoTipoIntervencion(rs.getString("coTipoIntervencion"));
				vo.setNoTipoIntervencion(rs.getString("noTipoIntervencion"));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}

	public void insertar(TipoIntervencion vo) throws DAOExcepcion {
		System.out.println("TipoIntervencionDAO: insertar(TipoIntervencion vo)");
		String query = "INSERT INTO tipointervencion(coTipoIntervencion, noTipoIntervencion) VALUES (?,?)";
		
		if (findcoTipoIntervencion(vo.getCoTipoIntervencion()) !=null ) {			
			throw new DAOExcepcion("Codigo de Tipo de Intervencion ya existe.");}
			else {System.out.print("Codigo de Tipo de Intervencion fue creado satisfactoriamente...");}
		
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getCoTipoIntervencion());
			stmt.setString(2, vo.getNoTipoIntervencion());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	public TipoIntervencion findcoTipoIntervencion(String CoTipoIntervencion) throws DAOExcepcion {
		System.out.println("TipoIntervencionDAO: findTipoIntervencion(String CoTipoIntervencion)");
		TipoIntervencion oTipoIntervencion = null;
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "SELECT * FROM TIPOINTERVENCION WHERE CoTipoIntervencion = ?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, CoTipoIntervencion);
			rs = stmt.executeQuery();
			if (rs.next()) {
				oTipoIntervencion = new TipoIntervencion();
				oTipoIntervencion.setCoTipoIntervencion(rs.getString("CoTipoIntervencion"));
				//oRol.setnoRol(rs.getString("NoRol"));
			}
		} catch (SQLException e) {
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return oTipoIntervencion;
	}	


		public TipoIntervencion obtener(String coTipoIntervencion) throws DAOExcepcion {
			System.out.println("TipoIntervencionDAO: obtener(String coTipoIntervencion)");
			TipoIntervencion vo = new TipoIntervencion();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				String query = "select codigo, nombre from TipoIntervencion where coTipoIntervencion=?";
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, coTipoIntervencion);
				rs = stmt.executeQuery();
				if (rs.next()) {
					vo.setCoTipoIntervencion(rs.getString(1));
					vo.setCoTipoIntervencion(rs.getString(2));
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return vo;
		}

		public void eliminar(String rolNombre) throws DAOExcepcion {
			System.out.println("TipoIntervencionDAO: eliminar(String coTipoIntervencion)");
			String query = "DELETE FROM tipointervencion WHERE codigo=?";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, rolNombre);
				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo eliminar");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}

		public void actualizar(TipoIntervencion vo) throws DAOExcepcion {
			System.out.println("RolDAO: actualizar(Rol vo)");
			String query = "update rol set descripcion=? where rol_nombre=?";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, vo.getNoTipoIntervencion());
				stmt.setString(2, vo.getCoTipoIntervencion());
				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo actualizar");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}

		
		public Collection<TipoIntervencion> listar() throws DAOExcepcion {
				System.out.println("TipoIntervencionDAO: listar()");
				Collection<TipoIntervencion> c = new ArrayList<TipoIntervencion>();
				Connection con = null;
				PreparedStatement stmt = null;
				ResultSet rs = null;
				try {
					con = ConexionBD.obtenerConexion();
					String query = "SELECT coTipoIntervencion,noTipoIntervencion from TipoIntervencion";
					stmt = con.prepareStatement(query);
					rs = stmt.executeQuery();
					while (rs.next()) {
						TipoIntervencion vo = new TipoIntervencion();
						vo.setCoTipoIntervencion(rs.getString("coTipoIntervencion"));
						vo.setNoTipoIntervencion(rs.getString("noTipoIntervencion"));
						c.add(vo);
					}
				} catch (SQLException e) {
					System.err.println(e.getMessage());
					throw new DAOExcepcion(e.getMessage());
				} finally {
					this.cerrarStatement(stmt);
					this.cerrarConexion(con);
				}
				return c;
			}

}
